#define ERR(x) ASSERT2(catch(restore_variable(x)), sprintf("%O", x))
#define IS(x, y) ASSERT2(same(restore_variable(x),y), sprintf("%O", x))

string *value_errs = (
		{	"\"\"x", "\"\\", "\"\\x\\", "\"\\x\"x",
			"-x"});
mapping values = ([
		"\"\r\"" : "\n",
		"\"\\\"\"" : "\"",
		"\"\\\"\\x\r\"" : "\"x\n",
		"-1" : -1,
		"0" : 0,
		"1" : 1,
		"22" : 22,
		"1.2" : 1.2,
		"333" : 333,
		"({})" : (
				{}),
		"({,})" : (
				{	0})
		]);

void do_tests()
{
	mixed x, y;
foreach (x in value_errs)
{
	ERR(x);
}

foreach (x, y in values)
{
	IS(x, y);
}

// arrays
foreach (x, y in values)
{
	IS("({" + x + ",})", (
					{	y}));
	IS("({" + x + "," + x + ",})", (
					{	y, y}));
}

// mappings
foreach (x, y in values)
{
	IS("([1:" + x + ",])", ([1:y ]));
	IS("([" + x + ":" + x + ",])", ([ y: y ]));
}
}
